package backing;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import to.Determinacao;
import to.DeterminacaoElemento;
import to.Elemento;
import util.JSFUtil;
import DAO.AbstractDAO;
import DAO.DeterminacaoDAO;
import DAO.ElementoDAO;

@ManagedBean
@RequestScoped
public class DeterminacaoElementoBacking {

	Determinacao determinacaoSelecionada;
	Elemento elementoSelecionado;
	private DataModel<Elemento> listaElemento;
	private DataModel<Determinacao> listaDeterminacao;

	DeterminacaoDAO dDAO = new DeterminacaoDAO();
	ElementoDAO eDAO = new ElementoDAO();
	private String nomeDeterminacao;
	private String nomeElemento;

	DeterminacaoElemento determinacaoElementoSalvar = new DeterminacaoElemento();

	public DeterminacaoElementoBacking() {

		carregarDeterminacao();
		carregarElemento();
	}

	public String salvar() {

		try {

			if (determinacaoElementoSalvar == null) {
				determinacaoElementoSalvar = new DeterminacaoElemento();
			}

			AbstractDAO abDAO = new AbstractDAO();
			abDAO.saveOrUpdate(determinacaoElementoSalvar);
			JSFUtil.addInfoMessage("Salvo com sucesso!");

			reset();

		} catch (Exception e) {
			JSFUtil.addInfoMessage("Erro ao salvar!");
		}
		return "";
	}

	public void reset() {

		this.determinacaoElementoSalvar = null;
	}

	public void carregarElemento() {
		try {
			this.listaElemento = new ListDataModel<Elemento>(eDAO.buscarTodos());

		} catch (Exception e) {
			JSFUtil.addErrorMessage(e.getMessage());
		}
	}

	public void carregarDeterminacao() {
		try {
			this.listaDeterminacao = new ListDataModel<Determinacao>(
					dDAO.buscarTodos());
		} catch (Exception e) {
			JSFUtil.addErrorMessage(e.getMessage());
		}
	}

	public void onRowSelectDeterminacao(Determinacao determinacao) {
		this.determinacaoSelecionada = determinacao;
		determinacaoElementoSalvar.setDeterminacao(determinacao);
		nomeDeterminacao = determinacaoSelecionada.getDescricao();
	}

	public void onRowSelectElemento(Elemento elemento) {
		this.elementoSelecionado = elemento;
		determinacaoElementoSalvar.setElemento(elemento);
		nomeElemento = elementoSelecionado.getDescricao();
		System.out.println(this.elementoSelecionado.getDescricao());
	}

	public String getNomeDeterminacao() {
		return nomeDeterminacao;
	}

	public void setNomeDeterminacao(String nomeDeterminacao) {
		this.nomeDeterminacao = nomeDeterminacao;
	}

	public String getNomeElemento() {
		return nomeElemento;
	}

	public void setNomeElemento(String nomeElemento) {
		this.nomeElemento = nomeElemento;
	}

	public Determinacao getDeterminacaoSelecionada() {
		return determinacaoSelecionada;
	}

	public void setDeterminacaoSelecionada(Determinacao determinacaoSelecionada) {
		this.determinacaoSelecionada = determinacaoSelecionada;
	}

	public Elemento getElementoSelecionado() {
		return elementoSelecionado;
	}

	public void setElementoSelecionado(Elemento elementoSelecionado) {
		this.elementoSelecionado = elementoSelecionado;
	}

	public DeterminacaoElemento getDeterminacaoElementoSalvar() {
		return determinacaoElementoSalvar;
	}

	public void setDeterminacaoElementoSalvar(
			DeterminacaoElemento determinacaoElementoSalvar) {
		this.determinacaoElementoSalvar = determinacaoElementoSalvar;
	}

	public DataModel<Elemento> getListaElemento() {
		return listaElemento;
	}

	public void setListaElemento(DataModel<Elemento> listaElemento) {
		this.listaElemento = listaElemento;
	}

	public DataModel<Determinacao> getListaDeterminacao() {
		return listaDeterminacao;
	}

	public void setListaDeterminacao(DataModel<Determinacao> listaDeterminacao) {
		this.listaDeterminacao = listaDeterminacao;
	}

	public DeterminacaoDAO getdDAO() {
		return dDAO;
	}

	public void setdDAO(DeterminacaoDAO dDAO) {
		this.dDAO = dDAO;
	}

	public ElementoDAO geteDAO() {
		return eDAO;
	}

	public void seteDAO(ElementoDAO eDAO) {
		this.eDAO = eDAO;
	}

}
